package middleware

import (
	"fmt"
	"time"

	"GinAdmin/core/logger"

	"github.com/gin-gonic/gin"
)

// Logger 日志中间件
func Logger() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 开始时间
		startTime := time.Now()

		// 处理请求
		c.Next()

		// 结束时间
		endTime := time.Now()

		// 执行时间
		latencyTime := endTime.Sub(startTime)

		// 请求方式
		reqMethod := c.Request.Method

		// 请求路由
		reqUri := c.Request.RequestURI

		// 状态码
		statusCode := c.Writer.Status()

		// 请求IP
		clientIP := c.ClientIP()

		// 日志格式
		logStr := fmt.Sprintf("[GIN] %s | %3d | %13v | %15s | %s | %s",
			endTime.Format("2006-01-02 15:04:05"),
			statusCode,
			latencyTime,
			clientIP,
			reqMethod,
			reqUri,
		)

		// 根据状态码设置日志级别
		if statusCode >= 500 {
			logger.Error(logStr)
		} else if statusCode >= 400 {
			logger.Warn(logStr)
		} else {
			logger.Info(logStr)
		}
	}
}
